#include<iostream>
using namespace std;
const int N = 110;
int f[N], g[N];

int a[N];
int main()
{
	int n = 0;
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	//从左往右和从右往左查找两次
	//注意这个题不能用模板2来做，因为模板2是最长子序列他两个最长子序列肯呢个会重合且最大值不一样
	for (int i = 1;i <= n;i++)
	{
		f[i] = 1;
		for (int j = 1;j < i;j++)
		{
			if (a[i] > a[j]) f[i] = max(f[i], f[j] + 1);

		}
	}
	for (int i = n;i >= 1;i--)
	{
		g[i] = 1;
		for (int j = n;j > i;j--)
		{
			if (a[i] > a[j]) g[i] = max(g[i], g[j] + 1);
		}
	}
	//因为我们找的是这个人为最大值的左右最长上升子序列，所以说不会重合
	int ret = 0;
	for (int i = 1;i <= n;i++)
	{
		ret = max(ret, f[i] + g[i] - 1);
	}
	cout << n-ret << endl;
	
	return 0;
}